﻿// // -------------------------------------------------------------------------------------
// // Copyright 2012 ELEN7046 Group 2
// // 
// // Last Modified on: 2012-06-10
// // 
// // Contributors:
// // 
// // Amith Sewnarain
// // Elmar Vosloo
// // Jason Thorne
// // Satish Jewan
// // 
// // Wits University 
// // School of Electrical & Information Engineering
// // Software Engineering Tools and Techniques
// // 
// // -------------------------------------------------------------------------------------
// // 
// // This file is part of the DishDash Event Visualization System.
// // 
// // DishDash is free software: you can redistribute it and/or modify
// // it under the terms of the GNU General Public License as published by
// // the Free Software Foundation, either version 3 of the License, or
// // (at your option) any later version.
// // 
// // DishDash is distributed in the hope that it will be useful,
// // but WITHOUT ANY WARRANTY; without even the implied warranty of
// // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// // GNU General Public License for more details.
// // 
// // You should have received a copy of the GNU General Public License
// // along with DishDash.  
// // If not, see <http://www.gnu.org/licenses/>.
// // -------------------------------------------------------------------------------------

/// <reference path="../services/EventFetchingClientSideService.js" />
/// <reference path="~/js/flotr2.min.js" />

var dishdash = dishdash || { };
dishdash.graphs = dishdash.graphs || { };

dishdash.graphs.eventCountWidget = function(targetId, widgetConfig) {
    this.renderTarget = document.getElementById(targetId);
    this.configuration = widgetConfig;
    this.categoryService = new dishdash.services.EventFetchingClientSideService();

    var graph = null;
    var self = this;

    this.draw = function(data) {

        graph = window.Flotr.draw(this.renderTarget, data, {
            xaxis: { showLabels: false },
            yaxis: { showLabels: false },
            pie: {
                show: true
            },
            HtmlText: false,
            mouse: { track: true },
            legend: {
                position: 'se',
                backgroundColor: '#D2E8FF'
            },
            title: "Total Event Distribution"
        });
    };

    this.start = function() {

        var now = new Date();
        var startTime = new Date(now - (this.configuration.samplePeriod * 1000));

        var request = {
            StartTime: startTime,
            EventTypes: this.configuration.events
        };
        this.categoryService.GetAggregatedEventCountByEventType(request, this.serviceCallback);
    };

    this.serviceCallback = function(response) {

        var metaData = {
            title: ""
        };
        
        var dataPoints = [];

        if (!response.Error && response !== undefined && response.AggregatedEventCounts[0] !== undefined) {

            for (var i = 0; i < response.AggregatedEventCounts.length; i++) {
                var dataPoint = {
                    data: [[0, response.AggregatedEventCounts[i].AggregatedCount]],
                    label: response.AggregatedEventCounts[i].EventType
                };

                dataPoints.push(dataPoint);
            }

            self.draw(dataPoints);
            
        } else {
            dataPoints = {
                data: [[0, 0]],
                label: ""
            };
            metaData.title = "No Data Available";
        }


        setTimeout(function() {
            self.start();
        }, self.configuration.refreshPeriod * 1000);
    };

};